home *** CD-ROM | disk | FTP | other *** search
- #define MODULE_COLSEL
- /*
-
- int colsel_init(void)
-
- static void colsel_updateCurSel(void)
-
- int ColSelRgbSBarProc(kobj, messId, argc, pev, trigger)
- int ColSelColListWinProc(kobj, messId, argc, pev, trigger)
- int ColSelSampleWinProc(kobj, messId, argc, pev, trigger)
- int ColSelGradWinProc(kobj, messId, argc, pev, trigger)
-
- void colsel_getPixel(PIXEL *pix)
- // 現在選択している色をピクセル値(PIXEL)として得る
- */
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <winb.h>
- #include <te.h>
- #include <fntb.h>
- #include <gui.h>
- #include <egb.h>
- #include <wgb.h>
-
- #include "art.h"
- #include "pic.h"
- #include "wgbmac.h"
- #include "guisub.h"
- #include "colsel.h"
-
- int idColSelDlg = -1 ;
- int idColSelTitleMsg = -1 ;
- int idColSelRgbSBar[3] = -1 ;
- int idColSelRgbMsg[3] = -1 ;
- int idColSelRgbNumMsg[3] = -1 ;
- int idColSelColListWin = -1 ;
- int idColSelSampleWin = -1 ;
- int idColSelGradWin = -1 ;
-
- /*--------------------------------------------------------*/
- /* モジュール内変数 */
- /*--------------------------------------------------------*/
-
- #define LSIZE 13
- #define LXNUM 6
- #define LYNUM 5
- static int colsel_x = 0;
- static PIXEL colsel_pix[LXNUM*LYNUM] =
- {
- { 0, 0, 0 },
- { 0, 0,128 },
- {30,30,188},
- { 0, 0,255 },
- {0,153,255},
- { 0,255,255 },
- { 128, 0,128 },
- { 255, 0,255 }, // 紫
- { 139,0,46}, // ワインレッド
- { 128, 0, 0 },
- { 255, 0, 0 },
- { 255,122,0},
- {255,200,0},
- {255,201,139},
- {255,212,198},
- { 154,123,139 }, // 藤色
- { 0,255,188},
- { 0,128,128 },
- {0,255,113},
- { 0,128, 0 }, // 暗緑
- { 0,255, 0 }, // 緑(プリミティブ)
- { 120,170,0}, // うぐいす色
- { 0,67,47}, // 暗ビリジャン
- { 15,145,127 }, // 明ビリジャン
- { 194,255,299}, // 灰白緑
- { 128,128, 0 },
- { 255,255, 0 },
- { 86, 86, 86 },
- { 172,172,172 },
- { 255,255,255 }
- };
- static PIXEL gradpix1,gradpix2;
- static PIXEL curpix;
-
- /*--------------------------------------------------------*/
- /* モジュール初期化 */
- /*--------------------------------------------------------*/
-
- int colsel_init(void)
- {
- gradpix1 = colsel_pix[0];
- gradpix2 = colsel_pix[LXNUM*LYNUM-1];
- curpix = colsel_pix[colsel_x];
- // 各部品のユーザー領域を設定
- FRAME adj = {0,0,-1,-1};
- FRAME adj2 = {1,1,-2,-2};
- RM_adjustWinUser(idColSelColListWin,&adj);
- RM_adjustWinUser(idColSelSampleWin,&adj2);
- RM_adjustWinUser(idColSelGradWin,&adj);
- return NOERR;
- }
-
- /*--------------------------------------------------------*/
- /* サブルーチン */
- /*--------------------------------------------------------*/
-
- static void colsel_updateCurSel(void)
- {
- int bar[3],i;
- static char numbuf[3][8];
- pixel_getRgb(&curpix, &bar[0],&bar[1],&bar[2]);
- RM_setClipVisibleAllScr();
- RM_setOriginZero();
- WINCLIP *clip;
- WIN_beginUpDateObj(idColSelDlg, &clip);
- for (i=0; i<3; i++)
- {
- RM_setScrollPos(idColSelRgbSBar[i], bar[i], TRUE);
- sprintf(numbuf[i],"%3d",bar[i]);
- MMI_SendMessage(idColSelRgbNumMsg[i],MM_SETMSG,1,numbuf[i]);
- MMI_SendMessage(idColSelRgbNumMsg[i],MM_SHOW,0);
- }
- MMI_SendMessage(idColSelSampleWin, MM_SHOW, 0);
- MMI_SendMessage(idColSelColListWin, MM_SHOW, 0);
- WIN_endUpDateObj(clip);
- RM_recoverOrigin();
- RM_recoverClipVisible();
- }
-
- /*--------------------------------------------------------*/
- /* 部品の呼び出し関数 */
- /*--------------------------------------------------------*/
-
- // idColSelRgbSBar[0..2]:MJ_SCRLL40の呼び出し関数
- int ColSelRgbSBarProc(int kobj, int messId, int argc, EVENT* pev, int trigger)
- {
- int bar[3],i;
- for (i=0; i<3; i++)
- bar[i] = RM_getScrollPos(idColSelRgbSBar[i]);
- pixel_setRgb(&colsel_pix[colsel_x], bar[0],bar[1],bar[2]);
- curpix = colsel_pix[colsel_x];
- colsel_updateCurSel();
- return NOERR ;
- }
-
- int ColSelColListWinProc(int kobj,int messId,int argc,EVENT* pev,int trigger)
- // idColSelColListWin:MJ_WINDOWL40の呼び出し関数
- {
- if (messId == MM_SHOW)
- {
- BEGINPAINT(kobj)
- FRAME fr;
- RM_getWinUserFrame(kobj,&fr);
- int i,j;
- for (i=0; i<LYNUM; i++)
- {
- for (j=0; j<LXNUM; j++)
- {
- int code = COLCODE(colsel_pix[i*LXNUM+j]);
- WGB_RBOXFILL(guiEgbPtr, fr.X+j*LSIZE,fr.Y+i*LSIZE,
- LSIZE+1,LSIZE+1, code,0);
- WGB_RBOXLINE(guiEgbPtr, fr.X+j*LSIZE,fr.Y+i*LSIZE,
- LSIZE+1,LSIZE+1, RMcol(BLACK),0);
- }
- }
- int tx,ty;
- tx = fr.X + (colsel_x%LXNUM) * LSIZE;
- ty = fr.Y + (colsel_x/LXNUM) * LSIZE;
- WGB_RBOXLINE(guiEgbPtr, tx,ty,LSIZE+1,LSIZE+1,RMcol(WHITE),0);
- ENDPAINT
- }
- else if (messId == MM_MOUSEON)
- {
- POINT pt = *(POINT*)&pev->info;
- FRAME fr;
- RM_getWinUserFrame(kobj, &fr);
- int tx,ty;
- tx = _min(LXNUM-1,(pt.x - fr.X) / LSIZE);
- ty = _min(LYNUM-1,(pt.y - fr.Y) / LSIZE);
- colsel_x = ty * LXNUM + tx;
- curpix = colsel_pix[colsel_x];
- colsel_updateCurSel();
- }
- return NOERR ;
- }
-
- /* initDataZCOLSEL:idColSelSampleWin:MJ_WINDOWL40の呼び出し関数 */
- int ColSelSampleWinProc(kobj, messId, argc, pev, trigger)
- int kobj ;
- int messId ;
- int argc ;
- EVENT *pev ;
- int trigger ;
- {
- if (messId == MM_SHOW)
- {
- int col = COLCODE(curpix);
- BEGINPAINT(kobj)
- FRAME fr;
- RM_getWinUserFrame(kobj,&fr);
- WGB_BOXFILL(guiEgbPtr,fr.X,fr.Y,fr.X2,fr.Y2,col,0);
- ENDPAINT
- }
- return NOERR ;
- }
-
- /* initDataZCOLSEL:idColSelGradWin:MJ_WINDOWL40の呼び出し関数 */
- int ColSelGradWinProc(kobj, messId, argc, pev, trigger)
- int kobj ;
- int messId ;
- int argc ;
- EVENT *pev ;
- int trigger ;
- {
- #define PIXHT 12
- if (messId == MM_SHOW)
- {
- BEGINPAINT(kobj)
- FRAME fr;
- RM_getWinUserFrame(kobj, &fr);
- WGB_BOXFILL(guiEgbPtr,fr.X,fr.Y,fr.X2,fr.Y+PIXHT-1,
- COLCODE(gradpix1),0);
- WGB_BOXLINE(guiEgbPtr,fr.X,fr.Y,fr.X2,fr.Y+PIXHT-1,
- RMcol(BLACK),0);
- WGB_BOXFILL(guiEgbPtr,fr.X,fr.Y2+1-PIXHT,fr.X2,fr.Y2,
- COLCODE(gradpix2),0);
- WGB_BOXLINE(guiEgbPtr,fr.X,fr.Y2+1-PIXHT,fr.X2,fr.Y2,
- RMcol(BLACK),0);
- WGB_BOXLINE(guiEgbPtr,fr.X,fr.Y,fr.X2,fr.Y2,RMcol(BLACK),0);
- int i,ht,y0;
- y0 = fr.Y+PIXHT;
- ht = (fr.Y2+1-PIXHT) - y0;
- for (i=0; i<ht; i++)
- {
- PIXEL pix;
- pix.r = ((uint)gradpix1.r*(ht-i-1) + (uint)gradpix2.r*i) / (ht-1);
- pix.g = ((uint)gradpix1.g*(ht-i-1) + (uint)gradpix2.g*i) / (ht-1);
- pix.b = ((uint)gradpix1.b*(ht-i-1) + (uint)gradpix2.b*i) / (ht-1);
- WGB_BOXFILL(guiEgbPtr,fr.X+1,y0+i,fr.X2-1,y0+i,
- COLCODE(pix),0);
- }
- ENDPAINT
- }
- else if (messId == MM_MOUSEON)
- {
- POINT pt = *(POINT*)&pev->info;
- FRAME fr;
- RM_getWinUserFrame(kobj, &fr);
- if (fr.Y+PIXHT <= pt.y && pt.y < fr.Y2+1-PIXHT)
- {
- int ht = fr.Y2+1-PIXHT - fr.Y+PIXHT;
- int t = pt.y - fr.Y+PIXHT;
- curpix.r = (gradpix1.r*(ht-1-t)+gradpix2.r*t+ht/2) / (ht-1);
- curpix.g = (gradpix1.g*(ht-1-t)+gradpix2.g*t+ht/2) / (ht-1);
- curpix.b = (gradpix1.b*(ht-1-t)+gradpix2.b*t+ht/2) / (ht-1);
- colsel_updateCurSel();
- }
- else
- {
- if (pt.y < fr.Y+PIXHT)
- gradpix1 = colsel_pix[colsel_x];
- else if (pt.y >= fr.Y2+1-PIXHT)
- gradpix2 = colsel_pix[colsel_x];
- RM_setOriginZero();
- RM_setClipVisibleAllScr();
- MMI_SendMessage(idColSelGradWin, MM_SHOW, 0);
- RM_recoverClipVisible();
- RM_recoverOrigin();
- }
- }
- #undef PIXHT
- return NOERR ;
- }
-
- /*--------------------------------------------------------*/
- /* 補助関数 */
- /*--------------------------------------------------------*/
-
- void colsel_getPixel(PIXEL *pix)
- /* 現在選択している色をピクセル値(PIXEL)として得る */
- {
- *pix = curpix;
- }
-
- void colsel_setCurPixel(PIXEL *pix)
- {
- curpix = *pix;
- colsel_pix[colsel_x] = *pix;
- colsel_updateCurSel();
- }
-